# -*- coding: utf-8 -*-

import matplotlib.pyplot as plt

class Graph():
	"""
		Classe que irá desenhar o gráfico e tabela correspondente a cada algoritmo

		Parâmetros de entrada:
			X: Valor do eixo X
			yElem: Lista com todos os valores a serem desenhados no eixo Y
			table: Tabela com os dados do eixo Y a serem introduzidos numa tabel
	"""
	def __init__(self, X, yElem, table=None):
		self.X = X
		self.yElem = yElem
		self.table = table
		if table is not None:
			self.drawTable()
		self.drawGraph()
		plt.show()

	def drawTable(self):
		"""
			Desenha uma tabela com o tamanho da lista, tempo experimental e teórico e a diferença entre os dois tempos
		"""
		plt.figure()
		ax = plt.subplot(111, frame_on=False) 
		ax.xaxis.set_visible(False) 
		ax.yaxis.set_visible(False) 
		col_labels = ['N', 'Tempo experimental', u'Tempo teórico', u'Diferença', u'Variância', u'Desvio Padrão', 'Erro amostral']
		table_vals = self.table

		the_table = plt.table(cellText=table_vals,
                      colLabels=col_labels,
                      loc='center right')
		the_table.set_fontsize(15)
		the_table.scale(1.4, 1.4)

	def drawGraph(self):
		"""
			Desenha o gráfico usando os valores do parâmetro de entrada da classe
		"""
		plt.figure()
		plt.grid(True)
		plt.ylabel(u'T(n) - Tempo médio em segundos')
		plt.xlabel(u'n - Número de elementos')
		for k, j, i in self.yElem:
			plt.plot(self.X, k, i, label=j)
		plt.legend()

		



